home *** CD-ROM | disk | FTP | other *** search
/ Aminet 16 / Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso / Aminet / dev / src / wangisrc.lha / wangi / z / oldwp / Prefs / Window_Pos.PAS < prev   
Pascal/Delphi Source File  |  1995-02-03  |  11KB  |  342 lines

  1. Procedure PosWindow; 
  2.  
  3. CONST
  4.     NI         = 0; 
  5.     CC         = 1;
  6.     G_TOP      = 2;
  7.     G_LEFT     = 3;
  8.     G_WIDTH    = 4;
  9.     G_HEIGHT   = 5;
  10.     G_GC       = 6;
  11.     G_PUB      = 7;
  12.     G_LEV      = 8;
  13.     G_SEL      = 9;
  14.     G_SWID     = 10;
  15.     G_OK       = 11; 
  16.     G_CAN      = 12;
  17.  
  18. VAR 
  19.     T            : Array[0..13] of tTagItem;
  20.     GadFlags     : tNewGadget;
  21.     G            : Array[NI..G_CAN] of pGadget;
  22.     dummy        : LONG;
  23.     ExitFlag, OK : Boolean;
  24.     TheWin       : pWindow;
  25.     message      : pIntuiMessage;
  26.     MsgClass, 
  27.     MsgCode,
  28.     gadID,
  29.     Levord, selord, 
  30.     tmpswid      : LONG;
  31.     StrInfo      : pStringInfo;
  32.     l            : Pointer;
  33.     l2           : LONG;
  34.     ret, cont    : Boolean;
  35.     RK           : pRemember;
  36.     l3           : BPTR;
  37.     strp         : STRPTR;
  38.     levlabs      : Array[0..5] of STRPTR;
  39.     sellabs      : Array[0..2] of STRPTR;
  40.     tmpdown, tmpacross, tmpscrt : LONG;
  41.     msg          : pIPCMsg;
  42.     port, rpyport: pMsgPort;
  43.     bf           : tBackFill;
  44.  
  45. Procedure SetIntGads(gad : pGadget; value : LONG);
  46.  
  47. Begin
  48.     t[0].ti_Tag  := GTIN_Number;
  49.     t[0].ti_Data := value;
  50.     t[1].ti_Tag  := TAG_DONE;
  51.     GT_SetGadgetAttrsA(gad, TheWin, NIL, @t);
  52. End;
  53.  
  54. begin
  55.     ret := false;
  56.     RK := NIL;
  57.     G[NI] := NIL;
  58.     G[CC] := CreateContext(@g[NI]);
  59.     If G[CC] <> NIL Then begin
  60.     
  61.         T[0].ti_Tag  := GTIN_MaxChars;
  62.         T[0].ti_Data := 5;
  63.         T[1].ti_Tag  := GTIN_Number;
  64.         T[1].ti_Data := CD.cd_LeftEdge;
  65.         T[2].ti_Tag  := TAG_END;
  66.         With GadFlags Do Begin
  67.             ng_TextAttr   := @My_Font;
  68.             ng_Width      := Sizes[S_G2_W];
  69.             ng_LeftEdge   := ((Sizes[TxtWin_L] * 2) div 3)+4+BF_W;
  70.             ng_TopEdge    := Sizes[TBS] + 4  + BF_H;
  71.             ng_Height     := Sizes[S_GAD_H];
  72.             ng_VisualInfo := vi;
  73.             ng_GadgetText := CStrConstPtrAR(@RK, 'Left Edge');
  74.             ng_GadgetID   := G_LEFT;
  75.             ng_Flags      := PLACETEXT_LEFT;
  76.         End;
  77.         G[G_LEFT] := CreateGadgetA(INTEGER_KIND, G[CC], @GadFlags, @T);
  78.         
  79.         T[1].ti_Data := CD.cd_TopEdge;
  80.         With GadFlags Do Begin
  81.             ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 2;
  82.             ng_GadgetText := CStrConstPtrAR(@RK, 'Top Edge');
  83.             ng_GadgetID   := G_TOP;
  84.         End;
  85.         G[G_TOP] := CreateGadgetA(INTEGER_KIND, G[G_LEFT], @GadFlags, @T);
  86.         
  87.         T[1].ti_Data := CD.cd_Width;
  88.         With GadFlags Do Begin
  89.             ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 2;
  90.             ng_GadgetText := CStrConstPtrAR(@RK, 'Width');
  91.             ng_GadgetID   := G_WIDTH;
  92.         End;
  93.         G[G_WIDTH] := CreateGadgetA(INTEGER_KIND, G[G_TOP], @GadFlags, @T);
  94.         
  95.         T[1].ti_Data := CD.cd_Height;
  96.         With GadFlags Do Begin
  97.             ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 2;
  98.             ng_GadgetText := CStrConstPtrAR(@RK, 'Height');
  99.             ng_GadgetID   := G_HEIGHT;
  100.         End;
  101.         G[G_HEIGHT] := CreateGadgetA(INTEGER_KIND, G[G_WIDTH], @GadFlags, @T);
  102.         
  103.         With GadFlags Do Begin
  104.             ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 2;
  105.             ng_GadgetText := CStrConstPtrAR(@RK, 'Grab Current Position');
  106.             ng_GadgetID   := G_GC;
  107.             ng_Flags      := PLACETEXT_IN;
  108.         End;
  109.         G[G_GC] := CreateGadgetA(BUTTON_KIND, G[G_HEIGHT], @GadFlags, NIL);
  110.         
  111.         T[0].ti_Tag  := GTST_MaxChars;
  112.         T[0].ti_Data := 255;
  113.         T[1].ti_Tag  := GTST_String;
  114.         T[1].ti_Data := LONG(CD.cd_PubScreen);
  115.         T[2].ti_Tag  := TAG_DONE;
  116.         With GadFlags Do Begin
  117.             ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 2;
  118.             ng_GadgetText := CStrConstPtrAR(@RK, 'PubScreen');
  119.             ng_GadgetID   := G_PUB;
  120.             ng_Flags      := PLACETEXT_LEFT;  
  121.         End;
  122.         G[G_PUB] := CreateGadgetA(STRING_KIND, G[G_GC], @GadFlags, @T);
  123.         
  124.         T[0].ti_Tag  := GTSL_Min;
  125.         T[0].ti_Data := 0;
  126.         T[1].ti_Tag  := GTSL_Max;
  127.         T[1].ti_Data := 50;
  128.         T[2].ti_Tag  := GTSL_Level;
  129.         T[2].ti_Data := CD.cd_SWid;
  130.         T[3].ti_Tag  := GTSL_LevelPlace;
  131.         T[3].ti_Data := PLACETEXT_RIGHT;
  132.         T[4].ti_Tag  := GTSL_LevelFormat;
  133.         T[4].ti_Data := LONG(CStrConstPtrAR(@RK, '%ld'));
  134.         T[5].ti_Tag  := GTSL_MaxLevelLen;
  135.         T[5].ti_Data := 2;
  136.         T[6].ti_Tag  := TAG_DONE;
  137.         With GadFlags Do Begin
  138.             ng_Width      := Sizes[S_G2_W] - (3*ng_TextAttr^.ta_YSize);
  139.             ng_GadgetText := CStrConstPtrAR(@RK, 'ScrollerW');
  140.             ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 1;
  141.             ng_GadgetID   := G_SWID;
  142.         End;
  143.         G[G_SWID] := CreateGadgetA(SLIDER_KIND, G[G_PUB], @GadFlags, @T);
  144.         tmpswid := CD.cd_SWid;
  145.  
  146.  
  147.         levlabs[0] := CStrConstPtrAR(@RK, 'Float');
  148.         levlabs[1] := CStrConstPtrAR(@RK, 'Backdrop');
  149.         levlabs[2] := CStrConstPtrAR(@RK, 'Backmost');
  150.         levlabs[3] := CStrConstPtrAR(@RK, 'Frontmost');
  151.         levlabs[4] := CStrConstPtrAR(@RK, 'No Border');
  152.         levlabs[5] := NIL;
  153.         T[0].ti_Tag  := GTCY_Labels;
  154.         T[0].ti_Data := LONG(@levlabs);
  155.         T[1].ti_Tag  := GTCY_Active;
  156.         T[1].ti_Data := CD.cd_Level;
  157.         T[2].ti_Tag  := TAG_DONE;
  158.         With GadFlags Do Begin
  159.             ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 2;
  160.             ng_Width      := Sizes[S_G2_W];
  161.             ng_GadgetText := CStrConstPtrAR(@RK, 'Pad Type');
  162.             ng_GadgetID   := G_LEV;
  163.             ng_Flags      := PLACETEXT_LEFT;  
  164.         End;
  165.         G[G_LEV] := CreateGadgetA(CYCLE_KIND, G[G_SWID], @GadFlags, @T);
  166.         
  167.         sellabs[0] := CStrConstPtrAR(@RK, 'Double-Click');
  168.         sellabs[1] := CStrConstPtrAR(@RK, 'Single-Click');
  169.         sellabs[2] := NIL;
  170.         T[0].ti_Tag  := GA_Disabled;
  171.         If Reg.key_ID = UNREG then 
  172.             t[0].ti_Data := True_
  173.         else
  174.             t[0].ti_Data := False_; 
  175.         T[1].ti_Tag  := GTCY_Labels;
  176.         T[1].ti_Data := LONG(@sellabs);
  177.         T[2].ti_Tag  := GTCY_Active;
  178.         T[2].ti_Data := CD.cd_Selection;
  179.         T[3].ti_Tag  := TAG_DONE;
  180.         With GadFlags Do Begin
  181.             ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 2;
  182.             ng_GadgetText := CStrConstPtrAR(@RK, 'Selection');
  183.             ng_GadgetID   := G_SEL;  
  184.         End;
  185.         G[G_SEL] := CreateGadgetA(CYCLE_KIND, G[G_LEV], @GadFlags, @T);
  186.  
  187.         With GadFlags Do Begin
  188.             ng_LeftEdge   := Sizes[S_WB_L]+8;
  189.             ng_Width      := (Sizes[S_G2_W] div 3);
  190.             ng_TopEdge  := ng_TopEdge + ng_Height +  8;
  191.             ng_Height     := Sizes[S_GAD_H];
  192.             ng_GadgetText := CStrConstPtrAR(@RK, 'Ok');
  193.             ng_GadgetID   := G_OK;
  194.             ng_Flags      := 0;
  195.         End;
  196.         G[G_OK] := CreateGadgetA(BUTTON_KIND, G[G_SEL], @GadFlags, NIL);
  197.  
  198.         With GadFlags Do Begin
  199.             ng_LeftEdge   := ((Sizes[TxtWin_L] * 2) div 3) + (2*BF_W) + Sizes[S_G2_W]+4-ng_Width; 
  200.             ng_GadgetText := CStrConstPtrAR(@RK, 'Cancel');
  201.             ng_GadgetID   := G_CAN;
  202.         End;
  203.         G[G_CAN] := CreateGadgetA(BUTTON_KIND, G[G_OK], @GadFlags, NIL);
  204.         
  205.          
  206.         T[0].ti_Tag  := WA_Left;
  207.         T[0].ti_Data := Left;
  208.         T[1].ti_Tag  := WA_Top;
  209.         T[1].ti_Data := Top;
  210.         T[2].ti_Tag  := WA_InnerWidth;
  211.         T[2].ti_Data := ((Sizes[TxtWin_L] * 2) div 3) + Sizes[S_G2_W] + 8 + (2*BF_W);
  212.         T[3].ti_Tag  := WA_Height;
  213.         T[3].ti_Data := g[G_CAN]^.TopEdge + g[G_CAN]^.Height + Sizes[S_WB_B] + 4;
  214.         T[4].ti_Tag  := WA_Title;
  215.         T[4].ti_Data := LONG(CStrConstPtrAR(@RK, 'Window Position and Preferences.')); 
  216.         T[5].ti_Tag  := WA_IDCMP;
  217.         T[5].ti_Data := STRINGIDCMP|BUTTONIDCMP|IDCMP_GADGETUP|IDCMP_REFRESHWINDOW
  218.                         |IDCMP_CLOSEWINDOW|MXIDCMP|IDCMP_MOUSEMOVE|SLIDERIDCMP;
  219.         T[6].ti_Tag  := WA_Flags;
  220.         T[6].ti_Data := WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_ACTIVATE|
  221.                         WFLG_SIMPLE_REFRESH|WFLG_DRAGBAR;
  222.         T[7].ti_Tag := WA_Gadgets;
  223.         T[7].ti_Data:= LONG(g[NI]);
  224.         T[8].ti_Tag := TAG_DONE;
  225.     
  226.         TheWin := OpenWindowTaglist(NIL,@T);
  227.         If TheWin <> NIL Then begin
  228.             InitBackFill(bf, TheWin, Sizes[S_WB_L], Sizes[TBS], T[2].ti_Data, 
  229.            T[3].ti_Data-Sizes[TBS]-Sizes[S_WB_B], BF_W, BF_H, BBF_H, 2, 0, JAM1); 
  230.         
  231.             GT_RefreshWindow(TheWin, NIL);
  232.             RefreshGList(g[NI], TheWIn, NIL, -1);
  233.             
  234.             Levord := CD.cd_Level;
  235.             selord := CD.cd_Selection;
  236.              
  237.             ExitFlag := False;
  238.             While Not exitflag Do Begin
  239.                 dummy := Wait(BitMask(TheWin^.UserPort^.MP_SIGBIT));
  240.                 message  := GT_GetIMsg(TheWin^.userPort);
  241.                 While message <> NIL do begin
  242.                     MsgClass := message^.Class;
  243.                     Msgcode := message^.Code;
  244.                     if (MsgClass = IDCMP_GADGETUP) or (MsgClass = IDCMP_MOUSEMOVE) then begin
  245.                         GadID := pGadget(message^.IAddress)^.GadgetID;
  246.                         StrInfo  := pGadget(message^.IAddress)^.SpecialInfo;
  247.                     end;
  248.                     GT_ReplyIMsg(message);
  249.                     Case MsgClass Of
  250.           
  251.                         IDCMP_REFRESHWINDOW : Begin
  252.                             GT_BeginRefresh(TheWin);
  253.                             DrawBackFill(bf, TheWin);
  254.                             GT_EndRefresh(TheWin, True);
  255.                             RefreshGList(g[NI], TheWin, NIL, -1);
  256.                             GT_RefreshWindow(TheWin, NIL);
  257.                         end;
  258.               IDCMP_CLOSEWINDOW : ExitFlag := True;
  259.               IDCMP_MOUSEMOVE : If GadID = G_SWID then
  260.                   tmpswid := Integer(MsgCode);
  261.                         IDCMP_GADGETUP : Begin
  262.                             Case GadID Of
  263.                                 G_LEV : Levord := MsgCode;
  264.                                 G_SEL : Selord := MsgCode;
  265.                                 G_GC : begin
  266.                                     { if WangiPad is running get current dims. }
  267.                                     Forbid;
  268.                                     port := FindPort(CStrConstPtrAR(@RK, 'WangiPad_Port'));
  269.                                     if port <> NIL then begin
  270.                                         rpyport := CreateMsgPort;
  271.                                         if rpyport <> NIL then begin
  272.                                             rpyport^.mp_Node.ln_Name := CStrConstPtrAR(@RK, 'Wangi_Prefs_Port');
  273.                                             rpyport^.mp_Node.ln_Pri := 100;
  274.                                             AddPort(rpyport);
  275.                                             
  276.                                             msg := AllocVec(Sizeof(tIPCMsg), MEMF_CLEAR);
  277.                                             if msg <> NIL then begin
  278.                                                 msg^.ipc_Type := IPC_REQUESTSIZES;
  279.                                                 msg^.ipc_Msg.mn_Length := Sizeof(tIPCMsg);
  280.                                                 
  281.                                                 PutMsg(port, pMessage(msg));
  282.                                                 
  283.                                                 msg := pIPCMsg(WaitPort(rpyport));
  284.                                                 while msg = NIL do 
  285.                                                     msg := pIPCMsg(WaitPort(rpyport));
  286.                                                 msg := pIPCMsg(GetMsg(rpyport));
  287.                                                 Permit;
  288.                                                 
  289.                                                 { set gadget attrs }
  290.                                                 SetIntGads(G[G_LEFT], msg^.ipc_Left);
  291.                                                 SetIntGads(G[G_TOP], msg^.ipc_Top);
  292.                                                 SetIntGads(G[G_WIDTH], msg^.ipc_Width);
  293.                                                 SetIntGads(G[G_HEIGHT], msg^.ipc_Height);
  294.                                                 FreeVec(msg);
  295.                                             End;
  296.                                             RemPort(rpyport);
  297.                                             DeleteMsgPort(rpyport);
  298.                                         End;
  299.                                     End else
  300.                                         Permit;
  301.                                 End;
  302.                                 
  303.                                 G_OK : begin            
  304.                                     StrInfo := g[G_LEFT]^.SpecialInfo;
  305.                                     CD.cd_LeftEdge := StrInfo^.LongInt_;
  306.                                     
  307.                                     StrInfo := g[G_TOP]^.SpecialInfo;
  308.                                     CD.cd_TopEdge := StrInfo^.LongInt_;
  309.                                     
  310.                                     StrInfo := g[G_WIDTH]^.SpecialInfo;
  311.                                     CD.cd_Width := StrInfo^.LongInt_;
  312.                                     
  313.                                     StrInfo := g[G_HEIGHT]^.SpecialInfo;
  314.                                     CD.cd_Height := StrInfo^.LongInt_;
  315.                                                                         
  316.                                     StrInfo := g[G_PUB]^.SpecialInfo;
  317.                                     CD.cd_PubScreen := CStrConstPtrAR(@RememberKey, PtrToPas(strinfo^.Buffer));
  318.                                     
  319.                                     CD.cd_SWid := tmpswid;
  320.                                     
  321.                                     CD.cd_Level := levord;
  322.                                     
  323.                                     CD.cd_Selection := selord;
  324.                                     
  325.                                     ExitFlag := True;
  326.                                     ret := True;
  327.                                 end;
  328.                 
  329.                                 G_CAN : ExitFlag := True;
  330.                             End;
  331.                         end;
  332.                     End;
  333.                     message  := GT_GetIMsg(TheWin^.userPort);
  334.                 End;
  335.             End;
  336.             FreeBackFill(bf);
  337.             CloseWindow(TheWin);
  338.             FreeGadgets(g[NI]);
  339.         end;
  340.     end;
  341.     FreeRemember(@RK, true);
  342. end;